//
//  HPStatusCellViewModel.swift
//  MyWeibo
//
//  Created by Apeng on 16/4/14.
//  Copyright © 2016年 Apengpeng. All rights reserved.
// 


//*** 专门处理cell 的显示数据 和逻辑的, 应该拥有 HPStatuses 这个模型

import UIKit

class HPStatusCellViewModel: NSObject {

//++++++++++didSet方法在初始化得时候不会调用,, 只有当属性的值在初始化之外的地方被设置时才会调用didSet方法, 所有要在init 方法中初始化
//    var statuses: HPStatuses? {
//        didSet{
//            
//        }
//    }
    
    // 存储型的属性初始化后, 在init方法中被赋值后,以后再调用就会从内存中读取, 消耗内存, 不消耗cpu
//    在init 方法中初始化
    var status: HPStatuses?
    var mbImg: UIImage?
    // 用户认证
    var verified_typeImg: UIImage?
    // 设置用户头像和昵称
    
    // 计算性属性 只读型计算属性 每次都会计算, 消耗cpu
    var headImgURL: NSURL?
    
    var repostTitle: String?
    var commentTitle: String?
    var supportTitle: String?
    
    // 时间, 来源
    var created_at: String? // 计算型属性
        {
            return NSDate.sinaDate(status?.created_at ?? "")?.fullDescription()
        }
    var source: String?

    
    
    init(statuses: HPStatuses) {
        super.init()
        
        // 记录参数
        self.status = statuses
        
        //直接计算
        headImgURL = NSURL(string: statuses.user?.profile_image_url ?? "")
        
        // 等级
        dealmaRankData()
        // 用户认证
        dealVerified_typeData()
        // toolBar
        repostTitle = dealToolBarData(statuses.reposts_count ?? 0, defaultTitle: "转发")
        commentTitle = dealToolBarData(statuses.comments_count ?? 0, defaultTitle: "评论")
        supportTitle = dealToolBarData(statuses.attitudes_count ?? 0, defaultTitle: "赞")
        
        // 来源
        dealWeiboSource()
    }
}



// 处理来源
extension HPStatusCellViewModel {
    private func dealWeiboSource() {
        //rel=\"nofollow\">TCL乐玩2C</a>
        let startFlag = "\">"
        let endFlag = "</"
        let str = status?.source ?? ""
        if let startRange = str.rangeOfString(startFlag), endRange = str.rangeOfString(endFlag) {
            let range = startRange.endIndex..<endRange.startIndex
            // 截取所需字符串
            source = "来自于 " + str.substringWithRange(range)
        }
        // 开始范围
//        let startRange = str.rangeOfString(startFlag)
        // 结束范围
//        let endRange = str.rangeOfString(endFlag)
        // 截取范围  需要判断, 不能为空
    }
}


// 处理toolBar上的数据
extension HPStatusCellViewModel {
    
    private func dealToolBarData(count: Int, defaultTitle: String) -> String{
        if count <= 0 {
            
            return defaultTitle
        }
        
        if count > 10000 {
            return "\(Double(count / 1000) / 10)万"
        }
        return "\(count)"
    }
}


// 类扩展处理微博数据方法
extension HPStatusCellViewModel {
    
    private func dealmaRankData() {
        // 等级
        let mbType = status?.user?.mbrank ?? 0
        if mbType > 0 && mbType < 7 {
            mbImg = UIImage(named: "common_icon_membership_level\(mbType)")
        }
    }
    
    private func dealVerified_typeData() {
        
        // 用户认证类型
        let verType = status?.user?.verified_type ?? 0
        // 有多个值, 使用switch 判断
        switch verType {
        case 1:
            verified_typeImg = UIImage(named: "avatar_vip")
        case 2, 3, 5:
            verified_typeImg = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verified_typeImg = UIImage(named: "avatar_grassroot")
        default:
            verified_typeImg = nil
        }
    }
}
